import Vue from 'vue'
import Fly from 'flyio/dist/npm/wx'
import { getToken } from '@/utils/auth'
import { getAuth } from '@/api/login'

const vue = new Vue()
const fly = new Fly()

// 设置超时
fly.config.timeout = 15000
// 设置请求基地址
fly.config.baseURL = process.env.BASE_API

// 请求拦截器
fly.interceptors.request.use((request) => {
  const accessToken = getToken()
  if (accessToken) {
    request.headers['accessToken'] = accessToken // 让每个请求携带token
  }
  const memberId = vue.$pt.getStorageSync('memberId')
  if (memberId) {
    request.headers['memberId'] = memberId // 让每个请求携带memberId
  }
  const visitorId = vue.$pt.getStorageSync('visitorId')
  if (visitorId) {
    request.headers['visitorId'] = visitorId
  }
  const accountInfo = vue.$pt.getAccountInfoSync()
  request.headers['appid'] = accountInfo.miniProgram.appId
  request.body = request.data
  // 可以显式返回request, 也可以不返回，没有返回值时拦截器中默认返回request
  return request
})

// 响应拦截器
fly.interceptors.response.use(
  (response) => {
    const res = response.data
    res.date = response.headers.date[0]
    if (res.code && res.code !== 101) {
      // 更新token
      if (res.code === 110) {
        vue.$pt.removeStorageSync('User-Token')
        vue.$pt.login({
          success(res) {
            if (res.code) {
              getAuth(res.code).then((response) => {
                vue.$pt.setStorageSync('User-Token', response.data.token)
              }).catch(() => {
              })
            }
          }
        })
        return false
      }
      // 404页面跳转
      if (res.code < 400 && res.code !== 110 && res.code !== 102 && res.code !== 103) {
        vue.$pt.hideToast()
        setTimeout(() => {
          vue.$pt.navigateTo({url: '/pages/home/main'})
        }, 1000)
        return false
      }
      if (res.code >= 400) {
        vue.$utils.showToast({ title: res.msg })
        return Promise.resolve({
          isError: true,
          errorMsg: res.msg,
          isNetError: false
        })
      }
      vue.$utils.showToast({ title: res.msg })
      return Promise.resolve({
        isError: true,
        errorMsg: res.msg,
        isNetError: false
      })
    } else {
      return res
    }
  },
  (err) => {
    // 发生网络错误后会走到这里
    // vue.$utils.showToast({ title: '网络请求错误' })
    console.log(err)
    return Promise.resolve({
      isError: true,
      errorMsg: err,
      isNetError: true
    })
  }
)

export default fly
